package com.rh.bmw4s.utills.glide;

import android.app.Activity;
import android.content.Context;
import android.widget.ImageView;

import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.rh.bmw4s.R;
import com.rh.bmw4s.utills.LogUtils;

import jp.wasabeef.glide.transformations.GrayscaleTransformation;


public class GlideImageLoader {
    private Context mContext;

    public GlideImageLoader(Context context) {
        this.mContext = context;
    }

    /**
     * 加载图片方法
     *
     * @param lodingImagerView
     * @param reRESULTsId      drawable中的图片id
     */
    public void display(ImageView lodingImagerView, int reRESULTsId) {//外部接口函数
        Glide.with(mContext)
                .load(reRESULTsId)
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .diskCacheStrategy(DiskCacheStrategy.RESULT)  //只保留转换后资源
                .skipMemoryCache(true)    //跳过内存缓存
                .into(lodingImagerView);
    }

    /**
     * 加载图片方法
     *
     * @param lodingImagerView
     * @param picUrl
     */
    public void display(ImageView lodingImagerView, String picUrl) {//外部接口函数
        Glide.with(mContext)
                .load(picUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                //.centerCrop()
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .skipMemoryCache(true)    //跳过内存缓存
                .into(lodingImagerView);
    }


    /**
     * 加载好友头像图片方法
     *
     * @param lodingImagerView
     * @param picUrl
     */
    public void displayHeadImg(ImageView lodingImagerView, String picUrl) {//外部接口函数
        Glide.with(mContext)
                .load(picUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .skipMemoryCache(true)
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(lodingImagerView);
    }

    /**
     * 加载图片方法
     *
     * @param activity
     * @param lodingImagerView
     * @param picUrl
     */
    public void display(Activity activity, ImageView lodingImagerView, String picUrl) {//外部接口函数
        Glide.with(activity)
                .load(picUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .diskCacheStrategy(DiskCacheStrategy.RESULT)
                .skipMemoryCache(true)
                .into(lodingImagerView);
    }

    /**
     * 加载图片方法，加载图片为 defaultImg
     *
     * @param lodingImagerView
     * @param picUrl
     * @param defaultImg
     */
    public void display(ImageView lodingImagerView, String picUrl, int defaultImg) {//外部接口函数
        if (defaultImg != 0) {
            Glide.with(mContext)
                    .load(picUrl)
                    .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                    .diskCacheStrategy(DiskCacheStrategy.RESULT)
                    .skipMemoryCache(true)
                    .placeholder(defaultImg)
                    .error(R.mipmap.icon_error)
                    .into(lodingImagerView);
        } else {
            Glide.with(mContext)
                    .load(picUrl)
                    .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                    .diskCacheStrategy(DiskCacheStrategy.RESULT)
                    .skipMemoryCache(true)
                    .placeholder(R.mipmap.icon_placeholder)
                    .error(R.mipmap.icon_error)
                    .into(lodingImagerView);
        }
    }

    /**
     * 加载图片方法，加载图片为 defaultImg
     *
     * @param activity
     * @param lodingImagerView
     * @param picUrl
     * @param defaultImg
     */
    public void display(Activity activity, ImageView lodingImagerView, String picUrl, int defaultImg) {//外部接口函数
        if (defaultImg != 0) {
            Glide.with(activity)
                    .load(picUrl)
                    .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                    .placeholder(defaultImg)
                    .error(R.mipmap.icon_error)
                    .diskCacheStrategy(DiskCacheStrategy.RESULT)
                    .skipMemoryCache(true)
                    .into(lodingImagerView);
        } else {
            Glide.with(activity)
                    .load(picUrl)
                    .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                    .placeholder(R.mipmap.icon_placeholder)
                    .error(R.mipmap.icon_error)
                    .diskCacheStrategy(DiskCacheStrategy.RESULT)
                    .skipMemoryCache(true)
                    .into(lodingImagerView);
        }
    }

    /**
     * 加载圆形图片
     */
    public void displayCircle(String mUrl, ImageView imageView) {
        Glide.with(mContext)
                .load(mUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new CropCircleTransformation(mContext))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(imageView);
    }

    /**
     * 加载圆形图片(带圆环)
     */
    public void displayCircle(String mUrl, int size, int color, ImageView imageView) {
        Glide.with(mContext)
                .load(mUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new GlideCircleTransform(mContext, size, color))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_header_default)
                .into(imageView);
    }

    /**
     * 加载圆形图片
     */
    public void displayCircle(int imgId, ImageView imageView) {
        Glide.with(mContext)
                .load(imgId)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new CropCircleTransformation(mContext))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(imageView);
    }

    /**
     * 加载圆角矩形
     */
    public void displayRound(String mUrl, ImageView imageView, int radus) {
        Glide.with(mContext)
                .load(mUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new RoundedCornersTransformation(mContext, radus, 0))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(imageView);
    }

    /**
     * 加载灰度图
     */
    public void displayGrayscale(String mUrl, ImageView imageView) {
        Glide.with(mContext)
                .load(mUrl)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new GrayscaleTransformation(mContext))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(imageView);
    }

    /**
     * 加载灰度图
     */
    public void displayGrayscale(int imgId, ImageView imageView) {
        Glide.with(mContext)
                .load(imgId)
                .animate(android.R.anim.fade_in)  // 自己设置渐现动画可以解决加载图片变形问题
                .bitmapTransform(new GrayscaleTransformation(mContext))
                .placeholder(R.mipmap.icon_placeholder)
                .error(R.mipmap.icon_error)
                .into(imageView);
    }


    public void clearImageCache() {
        new Thread(runnable).start();
        Glide.get(mContext).clearMemory(); // 必须在主线程中执行
    }

    Runnable runnable = new Runnable() {
        @Override
        public void run() {
            try {
                Glide.get(mContext).clearDiskCache(); // 必须在子线程中执行
            } catch (Exception ex) {
                LogUtils.e(ex.toString());
            }
        }
    };

}
